package com.molihub.service;

import com.molihub.entity.User;

import java.util.List;

/**
 * @InterfaceName: FileStoreMapper
 * @Description: 用户业务层接口
 * @author: xw
 * @date 2020/1/26 21:55
 * @Version: 1.0
 **/
public interface UserService {

    /**
     * @return java.lang.Integer 返回影响数据表的行数,返回用户主键封装到userId中
     * @Description 添加用户
     * @Author xw
     * @Date 12:55 2020/1/20
     * @Param [user]
     **/
    public Integer addUser(User user);

    /**
     * @return com.molihub.entity.User 返回查询到的用户对象
     * @Description 通过用户ID获得用户
     * 查询的属性包括:userId,openId,文件仓库id,用户名,邮箱,注册时间,头像地址
     * @Author xw
     * @Date 12:56 2020/1/20
     * @Param [id] 用户ID
     **/
    public User getUserById(Integer id);

    /**
     * @return java.util.List<com.molihub.entity.User>
     * @Description 通过用户Id的集合获得用户的集合
     * 查询的属性包括:userId,openId,用户名,邮箱,注册时间,头像地址
     * @Author xw
     * @Date 13:19 2020/1/20
     * @Param [list]
     **/
    public List<User> getUsersByIdList(List<Integer> list);

    /**
     * @return com.molihub.entity.User 返回查询到的用户对象
     * @Description 通过用户openId获得用户
     * 查询的属性包括:userId,openId,用户名,邮箱,注册时间,头像地址
     * @Author xw
     * @Date 12:56 2020/1/20
     * @Param [id] 用户ID
     **/
    public User getUserByOpenId(String openId);

    /**
     * @return com.molihub.entity.User
     * @Description 通过用户名和密码获得用户
     * 查询的属性:所有属性
     * @Author xw
     * @Date 13:02 2020/1/20
     * @Param [userName, password]
     **/
    public User getUserByUserNameAndPassword(String userName, String password);

    /**
     * @return com.molihub.entity.User
     * @Description 通过邮箱获得用户
     * 查询的属性:所有属性
     * @Author xw
     * @Date 14:31 2020/1/20
     * @Param [email]
     **/
    public User getUserByEmail(String email);

    /**
     * @return com.molihub.entity.User
     * @Description 通过文件仓库Id获得用户
     * 查询的属性包括:userId,openId,用户名,邮箱,注册时间,头像地址
     * @Author xw
     * @Date 14:35 2020/1/20
     * @Param [fileStoreId]
     **/
    public User getUserByFileStoreId(Integer fileStoreId);

    /**
     * @return void
     * @Description 根据userId更新用户的信息
     * [userName,password,email,registerStatus,active_code,imagePath]这几个属性哪个不为空就更新哪个
     * 不想修改哪个属性就将哪个属性设置为空
     * @Author xw
     * @Date 13:09 2020/1/20
     * @Param [user]
     **/
    public Integer updateUser(User user);

    /**
     * 根据用户名查找是否存在同名用户
     *
     * @param userName 用户名
     * @return com.molihub.entity.User
     * @author GGBOY
     * @date 2020/1/28
     */
    public User getUserByUserName(String userName);

    /**
     * 根据用户ID更新用户状态
     *
     * @param user 用户ID
     * @return java.lang.Integer
     * @author GGBOY
     * @date 2020/2/7
     */
    public Integer updateUserStatus(User user);
}
